package com.dd.controller;

import javafx.fxml.FXML;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField;
import javafx.scene.control.Button;
import javafx.scene.control.Alert;
import javafx.event.ActionEvent;
import javafx.stage.Stage;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;

import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.List;
/*`SelectGridController` 是 JavaFX 应用中的一个控制器类，主要用于“公众监督员选择网格”页面的数据交互。它的主要功能包括：

1. **省市选择**：  
   - 加载 `provinces.json` 文件，动态填充省份和城市下拉框（ComboBox）。
   - 用户选择省份后，城市下拉框会自动更新为该省下的所有城市。

2. **地址填写**：  
   - 用户可以在文本框中填写具体地址。

3. **下一步跳转**：  
   - 点击“下一步”按钮时，会校验省、市、地址是否填写完整。
   - 校验通过后，跳转到“选择AQI等级”页面（`select_aqi.fxml`），并把省、市、地址信息传递给下一个页面的控制器（`SelectAqiController`）。

4. **返回功能**：  
   - 点击“返回”按钮会跳转回主页面（`primary.fxml`）。

5. **异常与提示**：  
   - 省市数据加载失败、信息未填写完整等情况会弹窗提示用户。

---

**总结**：  
这个类就是“公众监督员选择网格页面”的控制器，主要用于公众监督员选择省、市、填写地址，并进入下一步反馈AQI等级。  
**它是公众监督员使用的页面**。
 */
public class SelectGridController {

    @FXML
    private ComboBox<String> provinceComboBox;
    @FXML
    private ComboBox<String> cityComboBox;
    @FXML
    private TextField addressField;
    @FXML
    private Button nextButton;
    @FXML
    private Button backButton;

    private List<Province> provinces;

    @FXML
    public void initialize() {
        // 加载省市数据
        try {
            InputStream inputStream = getClass().getResourceAsStream("/provinces.json");
            if (inputStream == null) {
                showAlert("错误", "未找到provinces.json文件！");
                return;
            }
            Gson gson = new Gson();
            provinces = gson.fromJson(new InputStreamReader(inputStream, "UTF-8"), new TypeToken<List<Province>>(){}.getType());
            for (Province p : provinces) {
                provinceComboBox.getItems().add(p.getName());
            }
        } catch (Exception e) {
            showAlert("错误", "加载省市数据失败：" + e.getMessage());
        }

        provinceComboBox.setOnAction(e -> {
            cityComboBox.getItems().clear();
            String selectedProvince = provinceComboBox.getValue();
            if (selectedProvince != null) {
                for (Province p : provinces) {
                    if (p.getName().equals(selectedProvince)) {
                        cityComboBox.getItems().addAll(p.getCities());
                        break;
                    }
                }
            }
        });

        nextButton.setOnAction(this::handleNext);
        
        backButton.setOnAction(e -> {
            try {
                FXMLLoader loader = new FXMLLoader(getClass().getResource("/com/dd/primary.fxml"));
                Parent root = loader.load();
                Stage stage = (Stage) backButton.getScene().getWindow();
                stage.setScene(new Scene(root, 420, 480)); // 登录页面的宽高
                stage.setTitle("东软环保公众监督系统");
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        });
    }

    private void handleNext(ActionEvent event) {
        String province = provinceComboBox.getValue();
        String city = cityComboBox.getValue();
        String address = addressField.getText();
        if (province == null || city == null || address.isEmpty()) {
            showAlert("提示", "请填写完整信息！");
            return;
        }
        // showAlert("成功", "已选择：" + province + " " + city + " " + address);
        // 跳转到选择AQI页面，并传递数据
        try {
            FXMLLoader loader = new FXMLLoader(getClass().getResource("/com/dd/select_aqi.fxml"));
            Parent root = loader.load();
            // 获取controller并传递参数
            com.dd.controller.SelectAqiController controller = loader.getController();
            controller.setFormData(province, city, address);

            Stage stage = (Stage) nextButton.getScene().getWindow();
            stage.setScene(new Scene(root, 420, 750));
            stage.setTitle("选择AQI - 东软环保公众监督平台");
            stage.setResizable(false);
            stage.show();
        } catch (Exception e) {
            showAlert("错误", "无法打开AQI页面：" + e.getMessage());
        }
    }

    private void showAlert(String title, String msg) {
        Alert alert = new Alert(Alert.AlertType.INFORMATION);
        alert.setTitle(title);
        alert.setHeaderText(null);
        alert.setContentText(msg);
        alert.showAndWait();
    }

    // 内部类用于Gson解析
    public static class Province {
        private String name;
        private List<String> cities;
        public String getName() { return name; }
        public List<String> getCities() { return cities; }
    }
} 